# -*- encoding: utf-8 -*-

"""
------------------------------------------
@File       : __init__.py
@Author     : maixiaochai
@Email      : maixiaochai@outlook.com
@CreatedOn  : 2021/9/28 10:12
------------------------------------------
    labuladong的算法小抄： https://labuladong.gitee.io/algo/

    tips:
        1.vector<vector<string>> res, C++中的二维向量
        2.push_back()函数，将一个新的元素加到 vector的最后面，位置为当前最后一个元素的下一个元素

    1.动态规划思想：
        1）计算机解决问题其实没有任何奇技淫巧，它唯⼀的解决办法就是穷举，穷举所有可能性。
        2）算法设计⽆⾮就是先思考“如何穷举”，然后再追求“如何聪明地穷举”

    2.回溯算法思想：
        1）解决一个回溯问题，实际上就是一个决策树的遍历过程
        2）思路：
            a）路径：也就是以及你工作车的选择
            b）选择列表：也就是你当前可以做的选择
            c）结束条件：也就是达到决策树底层，无法再做选择的条件

        3）小结：
            a）写 backtrack函数时，需要维护⾛过的「路径」和当前可以做的「选择列表」，当触发「结束条件」时，将「路径」记⼊结果集。
            b）使用 Python解题时，注意深浅层拷贝问题

    3.BFS（Breath First Search，广度优先）和 DFS（Depth First Search，深度优先）
        a）BFS，本质就是在⼀幅「图」中找到从起点 start 到终点 target 的最近距离。
            比如，走迷宫、
                词语替换（每次只能替换一个字符）
                消消乐的连接线
                二叉树的最小高度
                ...
        b）Java 队列中， queue.offer()表示向队列中添加元素，如果队列已满则返回 false
"""
